En \textbf{oFlute} existe la posibilidad de añadir nuevas canciones al juego, de
forma que los usuarios puedan ampliar el juego y que éste se convierta en una
herramienta lúdica prácticamente ilímitada.

Así, en un futuro podrán existir, por ejemplo, packs temáticos de canciones
descargables desde internet, con los que seguir practicando nuestra pericia con
la flauta dulce.

\section{Ficheros necesarios}

Cada una de las canciones presentes en el juego necesitará un fichero donde se
definirán las características y notas de la canción. El nombre de estos ficheros
sigue la estructura \texttt{songN.xml}, donde \textit{N} es el número de canción
a añadir.

Los ficheros de las canciones se encuentran en la carpeta \texttt{canciones},
ubicada en el directorio raíz de la instalación de oFlute. 

\section{Estructura del fichero de canciones}

\subsection{Lenguaje XML}
\label{sec:lenguaje-xml}

Cada fichero de canción es un archivo \textit{XML}~\cite{XMLSpec}. Como se
comentó en la sección~\ref{sec:diseno_xml}, XML es un lenguaje de marcado
extensible. La tecnología XML busca dar solución al problema de expresar
información estructurada de la manera más abstracta y reutilizable posible.

Todo documento XML tiene una etiqueta \textit{raíz}, de la cual cuelgan todas
las demás. En nuestro caso, los ficheros que representan las canciones tendrán
como raíz el elemento \texttt{Song}. Este es un ejemplo de un fichero completo:

\begin{minted}{xml}
<?xml version="1.0" ?>
<Song>
  <Title>Los pajaritos</Title>
  <Desc>Van por el aire</Desc>
  <BPM>60</BPM>
  <Notes>do5n mi5c fa5c sol5n sol5c sol5c la5n la5c la5c sol5n 
   sol5n fa5n fa5n mi5n mi5n re5c mi5c fa5c re5c do5n do5n</Notes>
</Song>
\end{minted}

\subsection{Campos iniciales}

\subsubsection{Título de la canción}

%\usestyle{default}

El título de la canción se indicará mediante la etiqueta \texttt{<Title>}, por ejemplo:

\inputminted{xml}{apendice_manual_canciones/snippet_1}

\subsubsection{Descripción de la canción}

La descripción de la canción sirve como subtítulo de la misma. Se definirá con
la etiqueta \texttt{<Desc>}, por ejemplo:

\inputminted{xml}{apendice_manual_canciones/snippet_2}

\subsubsection{Ritmo}

El ritmo de la canción se define como el número de pulsos por minuto -- en
inglés, \textbf{bpm}, \textit{beats per minute}. Podemos definir este atributo
con la etiqueta \texttt{<BPM>}, por ejemplo:

\inputminted{xml}{apendice_manual_canciones/snippet_3}

\subsection{Definición de las notas}

Ésta es la parte más importante del fichero de definición de canciones. Aquí se
indicarán las notas que queremos que aparezcan en el pentagrama y,
consecuentemente, que el jugador interprete.

Las notas se escribirán dentro de la etiqueta \texttt{<Notes>}, en orden
consecutivo y separadas por un espacio.

\inputminted{xml}{apendice_manual_canciones/snippet_4}

Cada una de las notas deberá representarse según la siguiente expresión
regular:
\begin{verbatim}
(do|re|mi|fa|sol|la|si|xx)(5|6|0)(r|b|n|c)(p)?
\end{verbatim}

La descomposición de esta sintaxis es la que sigue:
\begin{description}
\item[Altura] Se indicará con el texto de la nota (\textit{do}, \textit{re},
  \textit{mi}...) o, en el caso de querer incluir un silencio, con el texto
  \textit{xx}.
\item[Octava] La flauta dulce habitualmente solo cubre desde el Do en la quinta
  octava hasta el Re en la sexta octava. Ésta se indicará con un número, 5 ó 6,
  ó un 0 si estamos incluyendo un silencio.
\item[Duración] Las posibles duraciones son la redonda (4 tiempos), la blanca (2
  tiempos), la negra (1 tiempo) y la corchea (medio tiempo). Para indicar el
  mismo, se usarán las iniciales de los nombres, esto es, \textit{``r''},
  \textit{``b''}, \textit{``n''} o \textit{``c''}.
\item[Puntillo] Es posible añadir puntillo a las notas, incrementando su
  duración en la mitad de su tiempo original. Para ello, incluiremos la letra
  \textit{``p''} al final.
\end{description}

Una vez escritas las notas, ya tendremos el fichero de nuestra canción listo
para ser incluido en oFlute. Un ejemplo de fichero de canción completo podría
ser el siguiente:

\inputminted{xml}{apendice_manual_canciones/snippet_5}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "../memoria"
%%% End: 
